package com.solution.admin.auth.dao.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.solution.admin.auth.dao.OrgDao;
import com.solution.admin.auth.entity.OrgEntity;
import com.solution.common.dao.impl.BaseDaoImpl;
import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;

/**
 * 部门信息dao实现
 * @author diwankang
 * @version 2017年4月5日
 */
@Repository
public class OrgDaoImpl extends BaseDaoImpl<OrgEntity> implements OrgDao {

	@Autowired
	private SqlSessionTemplate sessionTemplate;

	/**
	 * 查询组织信息列表
	 * 
	 * @param pageParam
	 * @param paramMap
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author diwankang
	 * @date 2017年4月12日 下午2:51:02
	 * @modify <scy> <2017年4月12日 下午2:51:02>
	 */
	@Override
	public PageBean listOrgByPage(PageParam pageParam, Map<String, Object> paramMap) {
		return super.listPage(pageParam, paramMap, "selectOrgList", "selectCount");
	}

	/**
	 * 保存组织信息
	 * 
	 * @param orgEntity
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author diwankang
	 * @date 2017年4月12日 下午2:51:07
	 * @modify <scy> <2017年4月12日 下午2:51:07>
	 */
	@Override
	public long saveOrgInfo(OrgEntity orgEntity) {
		return super.insert(orgEntity);
	}

	/**
	 * 查询所有组织信息
	 * 
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author diwankang
	 * @date 2017年4月12日 下午3:07:49
	 * @modify <scy> <2017年4月12日 下午3:07:49>
	 */
	@Override
	public List<OrgEntity> listOrg(Map<String, Object> map) {
		return super.listBy(map);
	}

	/**
	 * 查询某经销商下的所有组织信息
	 * 
	 * @param dealerId
	 *            经销商ID
	 * @return 符合条件的组织实体集合
	 * @author Renlf
	 * @date 2017-5-6 下午 13:49:02
	 */
	@Override
	public List<OrgEntity> listOrgByDealerId() {
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put("status", "1");
		paramMap.put("isDelete", "1");
		return listBy(paramMap);
	}

	/**
	 * 根据orgCode获取对象的组织信息
	 * 
	 * @param paramMap
	 * @param sqlId
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author diwankang
	 * @date 2017年4月13日 下午2:12:30
	 * @modify <scy> <2017年4月13日 下午2:12:30>
	 */
	@Override
	public OrgEntity getOrgById(Long id) {
		return super.getById(id);
	}

	/**
	 * 根据orgCode模糊查询
	 * 
	 * @return
	 * @author diwankang
	 * @date 2017年4月13日 下午2:42:54
	 * @modify <scy> <2017年4月13日 下午2:42:54>
	 */
	@Override
	public int getCountByCode(String code) {
		return this.sessionTemplate.selectOne("getByOrgCode", code);
	}

	/**
	 * 修改组织信息
	 * 
	 * @author: solin
	 * @date: 2017年4月21日 下午4:49:15
	 * @param orgEntity
	 *            组织信息实体对象
	 * @return
	 */
	@Override
	public int updateOrg(OrgEntity orgEntity) {
		return super.update(orgEntity);
	}

	/**
	 * 更新组织的树形节点
	 * 
	 * @param id
	 *            组织编号
	 * @param orgName
	 *            组织名称
	 * @param parentId
	 *            上级组织编号
	 * @param status
	 *            状态
	 * @return 是否成功
	 */
	@Override
	public boolean updateTreeNode(Long id, String orgName, Long parentId, Integer status) {
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put("id", id);
		paramMap.put("orgName", orgName);
		paramMap.put("parentId", parentId);
		paramMap.put("status", status);
		return this.getSessionTemplate().update(this.getStatement("updateTreeNode"), paramMap) > 0;
	}
	/**
	 * 取得指定经销商的组织位列表
	 * @param org
	 * @return
	 * @author qiaoenyin
	 * @date 2017年5月25日 上午9:50:42
	 */
	@Override
	public List<OrgEntity> listOrg(OrgEntity org) {
		return getSessionTemplate().selectList(getStatement("listOrg"), org);
	}
	
	/**
	 * 查询新增组织的orgCode
	 * @param orgCode
	 * @return
	 */
	@Override
	public String getMaxOrgCode(String orgCode){
		return getSessionTemplate().selectOne(getStatement("selectMaxOrgCode"), orgCode);
	}

}
